package cn.xie.ai.rag.knowledge.api;

import org.springframework.ai.chat.ChatResponse;
import reactor.core.publisher.Flux;

/**
 * @author: xiaoxie
 * create: 2025-06-01 16:54
 * @BelongsProject: ai-rag-knowledge
 * @BelongsPackage: cn.xie.ai.rag.knowledge.api
 * description: ai的api
 */

public interface IAiService {

    /**
     * @description: 非流式的聊天消息生成场景
     * @author: xiaoxie
     * @date: 2025/6/1 下午4:58
     * @param: [model, message]
     * @return: org.springframework.ai.chat.ChatResponse
     **/
    ChatResponse generate(String model, String message);

    /**
     * @description: 流式的聊天消息生成场景
     * @author: xiaoxie
     * @date: 2025/6/1 下午4:58
     * @param: [model, message]
     * @return: reactor.core.publisher.Flux<org.springframework.ai.chat.ChatResponse>
     *     Flux 是 Reactor 框架中的一个类型，代表一个异步的、基于发布 - 订阅模式的流，
     *     可以用于处理顺序的、无界的数据序列。这里使用 Flux<ChatResponse> 作为返回值，
     *     意味着该方法返回的是一个聊天响应的流
     **/
    Flux<ChatResponse> generateStream(String model, String message);

    /**
     * @description: 基于rag知识库进行对话
     * @author: xiaoxie
     * @date: 2025/6/3 下午8:41
     * @param: [model, ragTag, message]
     * @return: reactor.core.publisher.Flux<org.springframework.ai.chat.ChatResponse>
     **/
    Flux<ChatResponse> generateStreamRag(String model, String ragTag, String message);

}
